#  多进程锁
from multiprocessing import Process, Lock
def save_to_file(index, lock):
    with lock:
        with open("test.log", "a", encoding="utf-8") as f :
            f.write(str(index) + "\n")


if __name__ == "__main__":
    process_array = []
    lock = Lock()
    for i  in range(10):
        p = Process(target=save_to_file, args=(i,lock))
        process_array.append(p)
        p.start()
    for p in process_array:
        p.join()
    print("done!")


#  多线程锁

import requests
import time
from threading import Thread, Lock


zero = 0
lock = Lock()

def foo():
    global zero
    for i in range(10**5):
        with lock:
            zero += 1
            zero -= 1


if __name__ == "__main__":
    process_array = []
    for i in range(2):
        p = Thread(target=foo)
        process_array.append(p)
        p.start()
    for p in process_array:
        p.join()

    print(zero)


#多进程通过Queue来实现进程通信

from multiprocessing import Queue


def save_to_queue(index, my_queue):
        my_queue.put(index)


if __name__ == "__main__":
    process_array = []
    my_queue = Queue()
    for i in range(10):
        p = Process(target=save_to_queue, args=(i, my_queue))
        process_array.append(p)
        p.start()
    for p in process_array:
        p.join()

    while True:
        print(my_queue.get())